/**
 * 基于axios封装
 */

 import axios from 'axios'
 import JSONbig from 'json-bigint'
 import router from '@/router'
//处理请求超出javascript的数据
var json = '{ "value" : 9223372036854775807, "v2": 123 }'

// console.log(JSONbig.parse(json))
 const request = axios.create({
     baseURL: 'http://ttapi.research.itcast.cn/', //请求的基本路径

       //官方是这么写的
       transformResponse: [function (data) {
        //后端返回的数据可能不是json格式的字符串
     //如果不是的话 那么JSONbig.parse 调用就会报错
     //可以使用try catch来捕获异常
      try{
        return JSONbig.parse(data)
      } catch (err) {
        //如果转换失败 就直接返回原始数据
        return data
      }
     }]
    
 })



//请求拦截器
// Add a request interceptor
//https://github.com/axios/axios#interceptors
request.interceptors.request.use(
    function (config) {
        //  console.log(config);
         const user = JSON.parse(window.localStorage.getItem('user'))  //
         //如果有用户登录 统一设置 token  //这样就不用每次不同的请求都要设置 token = `Bearer ${user.token}` 
        if(user){
            config.headers.Authorization = `Bearer ${user.token}` 
        }
        //这里的 return config之后 请求才会正真的发出去
    return config;
  }, function (error) {
    return Promise.reject(error);
  });



//响应拦截器  防止伪造数据进来看页面
// Add a response interceptor
request.interceptors.response.use(function (response) {
  // Any status code that lie within the range of 2xx cause this function to trigger
  //在2xx范围内的任何状态代码都会触发此函数
  // Do something with response data
  //对响应数据做些什么

  //注意一定要return 出去
  return response;
}, function (error) {
 console.log('状态异常');
if( error.response && error.response.status === 401){
  window.localStorage.removeItem('user')//移除掉垃圾数据
  router.push('/login') //引入 roter 跳转到登录页面

}

  return Promise.reject(error);
});




//  axios({
//      method:'',
//      url:'/a'
//  })
//  axios({
//      method:'',
//      url:'/b'
//  })

export default request